package com.Abstract抽象类.使用场景;

public class 抽象模板模式 {
    /**设计模式：抽象模板模式
     *  抽象类提供了一种模板，将共同的地方提取到父类当中，而不同之处抽象封装，让子类去重写实现。
     *  */
    public static void main(String[] args) {
        A a = new A();
        a.method();  //调用父类的方法。其中父类中的job()方法因为动态绑定机制，所以调用的是子类的job()方法

        B b = new B();
        b.method(); //调用父类的方法。其中父类中的job()方法因为动态绑定机制，所以调用的是子类的job()方法
    }
}

abstract class father{
    long num = 0;
    abstract public void  job();  //定义成抽象方法让子类实现，不同子类的job方法不同，调用对应的job方法
    public void method( ){
        long start = System.currentTimeMillis();
        job();  //由于动态绑定，所以这里会调用子类的job方法
        long end   = System.currentTimeMillis();
        System.out.println("for循环执行时间："+(end-start));
    }

}

class  A extends father{
    public void  job(){  //重写父类的job方法
        for (int i = 0; i < 1000000; i++) {
            num += i;
        }
    }
}

class  B extends father{
    public void  job(){  //重写父类的job方法
        for (int i = 0; i < 10000000; i++) {
            num += i;
        }
    }
}




